/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mindbox.mueblesalpes.negocio.utilidades;

import com.mindbox.mueblesalpes.negocio.entity.TipoDocumento;
import com.mindbox.mueblesalpes.negocio.entity.TipoUsuario;
import com.mindbox.mueblesalpes.negocio.persistence.GeoServiceLocal;
import com.mindbox.mueblesalpes.negocio.entity.Pais;
import com.mindbox.mueblesalpes.negocio.entity.Ciudad;
import com.mindbox.mueblesalpes.negocio.entity.Departamento;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author Diana Carolina
 */
@Stateless
public class UtilidadesMock implements IUtilidades {

    @EJB
    GeoServiceLocal geo;

    public UtilidadesMock() {
    }



    /**
     * Método que retorna un listado de paises
     * @return listado de paises
     */
    public List<Pais> consultarPaises() {
        return geo.getPaises();
    }
    /**
     * Método que retorna un listado de tipos de usuario
     * @return
     */
    public List consultarTipoUsuarios(){
        List tipoUsuarios = new ArrayList();
        TipoUsuario []valores = TipoUsuario.values();
        for(int i = 0; i < valores.length; i++ ){
            tipoUsuarios.add(valores[i]);
        }
        return tipoUsuarios;
    }
    /**
     * Método que retorna una lista con los tipos de documento
     * @return
     */
    public List consultarTipoDocumento(){
        List tiposDocumento = new ArrayList();
        TipoDocumento []valores = TipoDocumento.values();
        for(int i = 0; i<valores.length; i++){
            tiposDocumento.add(valores[i]);
        }
        return tiposDocumento;
    }
    /**
     * Método que retorna una lista con nombres de ciudades
     * @return listado de ciudades
     */
    public List<Ciudad> consultarCiudades(){
       return geo.getCiudades();
     }
    /**
     * Método que retorna una lista con nombres de departamentos
     * @return listado de departamentos
     */
    public List <Departamento> consultarDepartamentos(){
        return geo.getDepartamentos();
    }
    /**
     * Método que valida la diferencia existente entre dos fechas
     * @param fechaInicial
     * @param fechaFinal
     * @return días de diferencia entre una fecha y otra
     * @throws java.text.ParseException
     */
    public int fechasDiferenciaEnDias(Date fechaInicial, Date fechaFinal) throws java.text.ParseException {

		// Formateo la Fecha para que solo tenga en cuenta los dias naturales
		// y no los segundos ni milisegundos

		DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);

		String fechaInicioString = df.format(fechaInicial);
		try {
		fechaInicial = df.parse(fechaInicioString);
		}
		catch (ParseException ex) {
		}

		String fechaFinalString = df.format(fechaFinal);
		try {
		fechaFinal = df.parse(fechaFinalString);
		}
		catch (ParseException ex) {
		}

		// el metodo getTime devuelve la fecha en milisegundos
		long fechaInicialMs = fechaInicial.getTime();
		long fechaFinalMs = fechaFinal.getTime();
		// diferencia en milisegundos
		long diferencia = fechaFinalMs - fechaInicialMs;
		//conversion miliseg a dias
		double dias = Math.floor(diferencia / (1000 * 60 * 60 * 24));
		return ( (int) dias);
		}
    /**
     * Método que retorna el numero de semanas que han transcurrido entre un número de días especificado
     * @param dias
     * @return
     */
        public int semanasTranscurridas(int dias){
            int semanas = dias / 7 ;
            if(semanas == 0){
                return 1;
            }
            else return semanas;
        }
}
